package com.shujia.scala

object Demo4Fun {
  def main(args: Array[String]): Unit = {

    /**
     * 函数的定义  -- 函数可以在任何位置定义
     * 1、函数可以定义在object中，object中的函数可以直接调用
     * 2、可以在方法或者函数内部定义函数
     *
     */

    val i: Int = add(100, 200)


    def plus(i: Int, j: Int): Int = {
      i + j
    }

    val j: Int = plus(10, 20)


    /**
     * 函数的调用
     *
     */

    //使用object名称调用
    println(Demo4Fun.add(100, 200))
    //如果函数在同一个作用域中，可以直接使用函数名
    println(add(100, 200))


    //方法调用的简写
    val str = "java,spark,hadoop"
    val strings1: Array[String] = str.split(",")

    //简写,  前提是函数的参数只有一个
    val array1: Array[String] = str split ","

  }

  /**
   * def:关键字
   * add：函数名
   * (x: Int, y: Int) ：参数列表
   * Int：返回值类型
   * {} 函数体
   */

  def add(x: Int, y: Int): Int = {
    return x + y
  }

  /**
   * 函数的简写
   * 1、如果追后一行作为返回值，return可以省略
   * 2、如果函数的代码逻辑之后一行，{} 可以省略
   * 3、返回值的类型可以自动推断
   * 4、如果参数列表为空  ()可以不写,  如果定义时没有括号，调用时也不能有括号
   *
   */
  def add1(x: Int): Int = {
    x + x
  }

  def add2(x: Int, y: Int): Int = x + y

  def add3(x: Int, y: Int) = x + y

  def pr(): Unit = println("scala")

}
